--[[
制作紫色材料前提条件检查脚本
功能：
1. 打开背包
2. 查看钻石和金币数量
3. 查看背包格子数
4. 检查钻石和金币是否满足要求
5. 如果背包剩余空格子数小于10格，则执行清理背包和存储仓库
--]]

local log = require("通用方法集合.二次封装方法.Log")
local log_通用 = log.Log_通用

local M = {}

-- 配置参数
local 配置 = {
    最小钻石数量 = 100,  -- 最小钻石数量要求
    最小金币数量 = 100000,  -- 最小金币数量要求（100万）
    最小背包空格子数 = 12,  -- 最小背包空格子数要求
}

-- 检查钻石和金币数量是否满足要求
local function 检查资源数量()
    log_通用("开始检查资源数量...")
    
    -- 获取钻石数量
    local 钻石数量 = 钻石数量识别()
    log_通用("当前钻石数量: " .. tostring(钻石数量))
    
    -- 获取金币数量
    local 金币数量 = 金币数量识别()
    log_通用("当前金币数量: " .. tostring(金币数量))
    
    -- 检查钻石数量
    if 钻石数量 < 配置.最小钻石数量 then
        log_通用("钻石数量不足，需要至少 " .. 配置.最小钻石数量 .. " 钻石，当前只有 " .. 钻石数量)
        return false, "钻石数量不足"
    end
    
    -- 检查金币数量
    if 金币数量 < 配置.最小金币数量 then
        log_通用("金币数量不足，需要至少 " .. 配置.最小金币数量 .. " 金币，当前只有 " .. 金币数量)
        return false, "金币数量不足"
    end
    
    log_通用("资源数量检查通过")
    return true, "资源数量充足"
end

-- 检查背包格子数量
local function 检查背包格子()
    log_通用("开始检查背包格子数量...")
    
    -- 获取背包格子信息
    local 背包格子信息 = ""
    local 已用格子数 = ""
    local 格子上限 = ""
    
    for i = 1, 10 do
        if _ENV["图色_多点找色Ex"](找色_背包页面, 0.9, 0, 0, 0, 1, false) and 
           _ENV["图色_多点找色Ex"](找色_背包全部, 0.9, 0, 0, 0, 1, false) then
            
            背包格子信息 = _ENV["文字识别"](1419, 106, 1537, 161, 3)
            
            if 寻找文本(背包格子信息, "/") then
                已用格子数 = _ENV["文本_取左边"](背包格子信息, "/")
                格子上限 = _ENV["文本_取右边"](背包格子信息, "/")
                
                log_通用("背包格子信息: " .. 背包格子信息)
                log_通用("已用格子数: " .. 已用格子数 .. ", 格子上限: " .. 格子上限)
                
                local 剩余格子数 = _ENV["到整数"](格子上限) - _ENV["到整数"](已用格子数)
                log_通用("剩余格子数: " .. tostring(剩余格子数))
                
                if 剩余格子数 < 配置.最小背包空格子数 then
                    log_通用("背包空格子数不足，需要至少 " .. 配置.最小背包空格子数 .. " 个空格子，当前只有 " .. 剩余格子数)
                    return false, "背包空格子数不足", 剩余格子数
                else
                    log_通用("背包格子数量检查通过")
                    return true, "背包格子数量充足", 剩余格子数
                end
            else
                log_通用("背包格子信息识别失败，重试中...")
                _ENV["延迟"](500)
            end
        else
            log_通用("背包页面未打开，尝试打开背包...")
            开启背包()
            _ENV["延迟"](1000)
        end
    end
    
    log_通用("背包格子检查失败")
    return false, "背包格子检查失败", 0
end

-- 执行背包清理和仓库存储
local function 执行背包清理()
    log_通用("开始执行背包清理和仓库存储...")
    
    -- 执行包满处理（包含背包格子扩展）
    功能_包满处理()  
    log_通用("背包清理和仓库存储完成")
    return true
end

-- 主函数：检查制作紫色材料的前提条件
function M.检查制作前提条件()
    log_通用("=== 开始检查制作紫色材料的前提条件 ===")
    
    -- 1. 打开背包
    log_通用("1. 打开背包...")
    开启背包()
    _ENV["延迟"](2000)  -- 等待背包完全打开
    
    -- 2. 检查资源数量（钻石和金币）
    log_通用("2. 检查资源数量...")
    local 资源检查结果, 资源检查消息 = 检查资源数量()
    if not 资源检查结果 then
        log_通用("资源检查失败: " .. 资源检查消息)
        return false, 资源检查消息
    end
    
    -- 3. 检查背包格子数量
    log_通用("3. 检查背包格子数量...")
    local 格子检查结果, 格子检查消息, 剩余格子数 = 检查背包格子()
    
    -- 4. 如果背包空格子数不足，执行清理
    if not 格子检查结果 or 剩余格子数 < 配置.最小背包空格子数 then
        log_通用("4. 背包空格子数不足，执行清理...")
        执行背包清理()
        
        -- 重新检查背包格子数量
        log_通用("5. 重新检查背包格子数量...")
        格子检查结果, 格子检查消息, 剩余格子数 = 检查背包格子()
        if not 格子检查结果 then
            log_通用("清理后背包格子检查仍然失败: " .. 格子检查消息)
            return false, "清理后背包格子检查失败"
        end
        
        -- 再次检查剩余格子数
        if 剩余格子数 < 配置.最小背包空格子数 then
            log_通用("清理后背包空格子数仍然不足: " .. 剩余格子数 .. " < " .. 配置.最小背包空格子数)
            return false, "清理后背包空格子数仍然不足"
        end
    else
        log_通用("4. 背包空格子数充足，无需清理")
    end
    
    log_通用("=== 制作紫色材料前提条件检查完成 ===")
    log_通用("所有条件满足，可以开始制作紫色材料")
    return true, "所有条件满足"
end

-- 设置配置参数
function M.设置配置(新配置)
    if 新配置.最小钻石数量 then
        配置.最小钻石数量 = 新配置.最小钻石数量
    end
    if 新配置.最小金币数量 then
        配置.最小金币数量 = 新配置.最小金币数量
    end
    if 新配置.最小背包空格子数 then
        配置.最小背包空格子数 = 新配置.最小背包空格子数
    end
    log_通用("配置已更新")
end

-- 获取当前配置
function M.获取配置()
    return 配置
end

-- 测试函数
function M.测试()
    log_通用("开始测试制作紫色材料前提条件检查...")
    local 结果, 消息 = M.检查制作前提条件()
    log_通用("测试结果: " .. tostring(结果) .. ", 消息: " .. 消息)
    return 结果, 消息
end

return M
